package org.management.config.shiro.manager;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.session.Session;
import org.management.system.entity.UserEntity;
import org.management.utils.StringUtils;

import java.io.Serializable;

/**
 * @title: TokenManager
 * @description: 当前session用户信息
 * @author: jiangyan
 * @date:  2019/1/24
 */
public class TokenManager {
	
	/**
	 * 获取当前登录的用户User对象
	 * @return UserEntity
	 */
	public static UserEntity getToken(){
		return (UserEntity)SecurityUtils.getSubject().getPrincipal();
	}
	
	/**
	 * 登录
	 * @param user 用户信息
	 * @param rememberMe 是否记住密码
	 * @return UserEntity
	 */
	public static UserEntity login(UserEntity user,Boolean rememberMe){
		UsernamePasswordToken token = new UsernamePasswordToken(user.getLoginName(), user.getPassword());
		token.setRememberMe(rememberMe);
		SecurityUtils.getSubject().login(token);
		token.clear();
		return getToken();
	}
	
	
	
	/**
	 * 获取当前用户的Session
	 * @return Session
	 */
	public static Session getSession(){
		return SecurityUtils.getSubject().getSession();
	}

	/**
	 * 获取当前用户的Session
	 * @return Session
	 */
	public static String getSessionId(){
		return SecurityUtils.getSubject().getSession().getId().toString();
	}
	/**
	 * 获取当前昵称NAME
	 * @return getNickName
	 */
	public static String getNickName(){
		return getToken().getNickName();
	}
	
	/**
	 * 获取当前登录NAME
	 * @return String
	 */
	public static String getLoginName(){
		return getToken().getLoginName();
	}

	/**
	 * 获取当前用户ID
	 * @return String
	 */
	public static String getUserId(){
		return getToken()==null?null:getToken().getId();
	}

	/**
	 * 获取当前用户ID
	 * @return String
	 */
	public static String getRoleId(){
		return (String) getSession().getAttribute("roleId");
	}

	/**
	 * 获取验证码，获取一次后删除
	 * @return
	 */
	public static String getYZM(){
		String code = (String) getSession().getAttribute("CODE");
		getSession().removeAttribute("CODE");
		return code ;
	}

	/**
	 * 判断是否登录
	 * @return
	 */
	public static boolean isLogin() {
		return null != SecurityUtils.getSubject().getPrincipal();
	}

	/**
	 * 退出登录
	 */
	public static void logout() {
		SecurityUtils.getSubject().logout();
	}

}
